#ifndef RAPTER_VISUALIZATION_H
#define RAPTER_VISUALIZATION_H

#include <vector>
#include "pcl/visualization/pcl_visualizer.h"
#include "rapter/processing/impl/angleUtil.hpp" // appendAngles...
#include "rapter/primitives/pointPrimitive.h"

namespace rapter {
namespace vis {

    //! \brief Return type for visualizer. Convenience reasons (might need to be changed to std::shared_ptr.
    typedef pcl::visualization::PCLVisualizer::Ptr MyVisPtr;

    typedef rapter::PointPrimitive                             PointPrimitiveT;
    typedef std::vector<PointPrimitiveT>                    PointContainerT;
    typedef typename PointPrimitiveT::Scalar                Scalar;

    //! \brief Preimplemented, C++03 version for lines that reads info from disk.
    template <class PrimitiveT> int
    showCli( int argc, char** argv );

template <class PrimitiveT>
int
myShowCli
(int     show_normals,          // show every show_normals-th normal. 0 means no normals, 1 means every normal, 2 for every second normal, etc.
 bool    show_pids,             //--pids
 bool    show_pop,              // !--no-pop
 bool    print_angles,          //--print-angles
 bool    paralColours,          //--paral-colours
 bool    dir_colours,           //--dir-colours
 bool    hide_points,           //--hide-pts
 int     draw_mode,             //--draw-mode
 bool    no_paral,              //--no-paral
 bool    no_scale_sphere,       //--no-scale
 bool    save_poly,             //-save-poly
 bool    save_hough,            //--save-hough
 bool    show_empty,            //--hide-empty
 std::vector<int> gids,         //--gids
 std::vector<int> visSizeVector,//--vis-size
 std::vector<int> dids,         //--dids
 std::vector<int> statuses,     //--statuses
 std::vector<float> bg_colours, //--bg-colour
 bool show_spatial,             //--show-spatial
 std::string primitives_file,   //--prims -p
 std::string assoc_file,        //--assoc -a
 char use_tags,                 //--use-tags
 bool clusters,                 //--no-clusters
 bool dont_show_rels,           //--no-rel
 bool show_ids,                 // --ids
 Scalar scale,                  //--scale
 float   perfect_angle_limit,   //--perfect-angle
 Scalar  stretch,               //--stretch
 Scalar  hull_alpha,            //--hull-alpha
 std::string screenshotPath,    //--screenshot
 std::string title,             //--title
 int     pop_limit,             //--pop-limit
 std::string dir,               //--dir
 Scalar point_size,             //--point-size
 std::string cloud_file,        //--cloud
 AnglesT angle_gens,            //--angle-gens
 vis::MyVisPtr        vptr
 );

    //! \brief Preimplemented, C++03 version for lines.
} //...ns vis
} //...ns rapter

#endif // RAPTER_VISUALIZATION_H
